﻿using AutoMapper;
using CodeSaude.Application.Interfaces;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Entities;
using CodeSaude.Domain.Interfaces.Service;
using System;
using System.Collections.Generic;

namespace CodeSaude.Application.Services
{
    public class CuidadoApplicationService : BaseApplicationService, ICuidadoApplicationService
    {
        private readonly ICuidadoService _cuidadoService;

        public CuidadoApplicationService(ICuidadoService cuidadoService)
        {
            _cuidadoService = cuidadoService;
        }

        public void Create(CuidadoViewModel model)
        {
            try
            {
                Cuidado cuidado = Mapper.Map<CuidadoViewModel, Cuidado>(model);

                BeginTransaction();
                _cuidadoService.Add(cuidado);
                Commit();
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Dispose()
        {
            _cuidadoService.Dispose();
        }

        public IEnumerable<CuidadoViewModel> GetAll()
        {
            try
            {
                return Mapper.Map<IEnumerable<CuidadoViewModel>>(_cuidadoService.GetAll());
            }
            catch (Exception)
            {
                throw;
            }
        }

        public CuidadoViewModel GetById(int id)
        {
            try
            {
                return Mapper.Map<CuidadoViewModel>(_cuidadoService.GetById(id));
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void Delete(CuidadoViewModel model)
        {
            try
            {
                Cuidado cuidado = _cuidadoService.GetById(model.CuidadoId);
                BeginTransaction();
                _cuidadoService.Remove(cuidado);
                Commit();

            }
            catch (Exception)
            {

                throw;
            }
        }

        public void Update(CuidadoViewModel model)
        {
            try
            {
                Cuidado cuidado = Mapper.Map<Cuidado>(model);
                BeginTransaction();
                _cuidadoService.Update(cuidado);
                Commit();
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
